package bdd;

import beans.*;
import java.sql.*;
import java.util.ArrayList;

public class QueriesEvents {

    public Connection con;

    public QueriesEvents() throws ClassNotFoundException, SQLException {
        con = ConnectBDD.getSingleton();
    }

    /*===================================================================*/
    // Lisre de ts les Events
    // --> Retourne une Liste d'Events
    /*===================================================================*/
    public ArrayList<CatEvents> ReadEventsAll() throws SQLException {
        ArrayList<CatEvents> liste = new ArrayList();

        CallableStatement cstmt = con.prepareCall("{call ps_listerEvents}");
        ResultSet res = cstmt.executeQuery();

        while (res.next()) {
            CatEvents event = new CatEvents();

            event.setEveId(res.getInt("EVE_ID"));
            event.setProId(res.getInt("PRO_ID"));
            event.setEveLabel(res.getString("EVE_LABEL"));
            event.setEveDebut(res.getDate("EVE_DEBUT"));
            event.setEveFin(res.getDate("EVE_FIN"));

            liste.add(event);
            System.out.println(event.toString());
        }

        return liste;
    }

    /*===================================================================*/
    // Read d'un Evenement Donné par Label
    // ---> Prend un Label Event en parametre
    // --> Retourne un d'Events
    /*===================================================================*/
    public CatEvents ReadEventByLabel(String eveLabel) throws SQLException {

        String req = "SELECT "
                + " EVE_ID, PRO_ID, EVE_LABEL, EVE_DEBUT, EVE_FIN"
                + " FROM T_EVENTS"
                + " WHERE EVE_LABEL = "
                + "'" + eveLabel + "'";

        System.out.println(req);
        Statement stm = con.createStatement();
        ResultSet rs = stm.executeQuery(req);

        rs.next();

        CatEvents catEvents = new CatEvents();

        catEvents.setEveId(rs.getInt("EVE_ID"));
        catEvents.setEveLabel(rs.getString("EVE_LABEL"));
        catEvents.setEveDebut(rs.getDate("EVE_DEBUT"));
        catEvents.setEveFin(rs.getDate("EVE_FIN"));

        System.out.println(catEvents.toString());

        return catEvents;
    }

    /*===================================================================*/
    // Creation d'un Evenement
    // --> Prend un objet event en parametre
    // --> Retourne le nbre de lignes affectées
    /*===================================================================*/
    public int createEvent(CatEvents events) throws SQLException {

        String req = "insert into t_events values('"
                + events.getProId() + "','"
                + events.getEveLabel() + "',"
                + " convert(date,'" + events.getEveDebut() + "',111),"
                + " convert(date,'" + events.getEveFin() + "',111))";

        System.out.println(req);
        Statement stm = con.createStatement();
        int i = stm.executeUpdate(req);
        System.out.println("nb de lignes inserée=" + i);
        return i;
    }

    /*===================================================================*/
    // Suppression d'un Evenement
    // --> Prend un EVE_ID en parametre
    // --> Retourne le nbre de lignes affectées
    /*===================================================================*/
    public int deleteEvent(int eveId) throws SQLException {

        String req = "delete from T_EVENTS where EVE_ID = '" + eveId + "'";

        System.out.println(req);
        Statement stm = con.createStatement();
        int i = stm.executeUpdate(req);
        System.out.println("nb de lignes supprimées=" + i);
        return i;
    }

    /*===================================================================*/
    // Update d'un Evenement
    // --> Prend un events en parametre
    // --> Retourne le nbre de lignes affectées
    /*===================================================================*/
    public int updateEvent(CatEvents events) throws SQLException {
        String req = "update T_EVENTS SET "
                + "PRO_ID='" + events.getProId() + "', "
                + "EVE_LABEL='" + events.getEveLabel() + "', "
                + "EVE_DEBUT=" + "convert(date,'" + events.getEveDebut() + "',111), "
                + "EVE_FIN=" + "convert(date,'" + events.getEveFin() + "',111) "
                + "where EVE_ID='" + events.getEveId() + "'";

        System.out.println(req);
        Statement stm = con.createStatement();
        int i = stm.executeUpdate(req);
        System.out.println("nb de lignes modifiées=" + i);
        return i;
    }

    /*===================================================================*/
    // Search sur evenements comportant une parie du Label
    // ---> Prend un String en parametre
    // --> Retourne une liste d'Events
    /*===================================================================*/
    public ArrayList<CatEvents> searchEvents(String eveLabel) throws SQLException {
        ArrayList<CatEvents> liste = new ArrayList();

        String req = "SELECT "
                + " EVE_ID, PRO_ID, EVE_LABEL, EVE_DEBUT, EVE_FIN"
                + " FROM T_EVENTS"
                + " WHERE EVE_LABEL LIKE "
                + "'%" + eveLabel + "%'";

        System.out.println(req);
        Statement stm = con.createStatement();
        ResultSet rs = stm.executeQuery(req);

        while (rs.next()) {
            CatEvents event = new CatEvents();

            event.setEveId(rs.getInt("EVE_ID"));
            event.setProId(rs.getInt("PRO_ID"));
            event.setEveLabel(rs.getString("EVE_LABEL"));
            event.setEveDebut(rs.getDate("EVE_DEBUT"));
            event.setEveFin(rs.getDate("EVE_FIN"));

            liste.add(event);
            System.out.println(event.toString());
        }
        return liste;
    }
}
